css gadget: Adjust baselines for min-height
authorMatthias Clasen <mclasen@redhat.com>
Sun, 21 Feb 2016 03:23:28 +0000 (22:23 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 21 Feb 2016 03:31:39 +0000 (22:31 -0500)
We were forcing the size to be at least min-height, but we left the
baselines as they were, which had the effect of making text e.g
in entries 'stick to the top'.

With this change, we adjust the baseline to keep the ratio of
baseline to height unchanged.

gtk/gtkcssgadget.c

index 7a254ebe698474d2a382b415cc2b8ac1939ef625..5bb7cac151bbda4ac6f3ab82f666f447f9133b04 100644 (file)
@@ -515,6 +515,7 @@ gtk_css_gadget_get_preferred_size (GtkCssGadget   *gadget,
   GtkBorder margin, border, padding;
   int min_size, extra_size, extra_opposite, extra_baseline;
   int unused_minimum, unused_natural;
+  int forced_minimum, forced_natural;
 
   if (minimum == NULL)
     minimum = &unused_minimum;
@@ -567,16 +568,25 @@ gtk_css_gadget_get_preferred_size (GtkCssGadget   *gadget,
 
   g_warn_if_fail (*minimum <= *natural);
 
-  *minimum = MAX (min_size, *minimum);
-  *natural = MAX (min_size, *natural);
-
-  *minimum = MAX (0, *minimum + extra_size);
-  *natural = MAX (0, *natural + extra_size);
+  forced_minimum = MAX (*minimum, min_size);
+  forced_natural = MAX (*natural, min_size);
 
   if (minimum_baseline && *minimum_baseline > -1)
-    *minimum_baseline = MAX (0, *minimum_baseline + extra_baseline);
+    {
+      if (*minimum > 0)
+        *minimum_baseline = *minimum_baseline * forced_minimum / *minimum;
+      *minimum_baseline = MAX (0, *minimum_baseline + extra_baseline);
+    }
   if (natural_baseline && *natural_baseline > -1)
-    *natural_baseline = MAX (0, *natural_baseline + extra_baseline);
+    {
+      if (*natural > 0)
+        *natural_baseline = *natural_baseline * forced_natural / *natural;
+      *natural_baseline = MAX (0, *natural_baseline + extra_baseline);
+    }
+
+  *minimum = MAX (0, forced_minimum + extra_size);
+  *natural = MAX (0, forced_natural + extra_size);
+
 }
 
 /**